As is known, the term “cache” generally refers to memory in which data objects are typically stored for faster access. The cache may be on a dedicated data storage device or system accessible by a computing device or system, or the cache may be resident on a computing device or system. For instance, a cache may be implemented as a server in a network (e.g., a cache server or proxy caching server in a World Wide Web or Internet environment) or as an integrated circuit (e.g., a cache either resident on the same integrated circuit as a microprocessor or separate therefrom).
Some of the well-known advantages associated with the use of a cache in such computing environments include the realization of a savings in access and/or processing time, as well as a reduction in data traffic.
A key problem with caching data for efficient performance occurs when multiple processors or computing systems need to share the same cached data. Since data may be changing frequently, cache coherence is essential.
Several solutions have been proposed for caches associated with processors, for example, such as those described in “Computer Architecture: A Quantitative Approach” by J. Hennessy and D. Patterson, 2nd ed., 1996, the disclosure of which is incorporated by reference herein. These schemes typically involve complicated protocols to deal with the fact that multiple processors can both access and update an object.
Other existing techniques include cooperating Web caches, for example, as described in P. Rodriguez, C. Spanner and E. Biersack, “Web Caching Architectures: Hierarchical and Distributed Caching,” Proceedings of the 4th International Web Caching Workshop, March 1999, the disclosure of which is incorporated by reference herein. In these situations, the caches might contain stale data, and coordinating consistent updates to caches is extremely difficult.
Another challenge associated with caching and, more generally, with data storage, is that, in many situations, an object needs to be cached, locked or otherwise maintained in a specific state for a certain period of time. For example, suppose that an object o is being accessed by multiple processes, p1, p2, . . . , pn. Process p1 would like to perform a series of updates to object o. In order to do so, the process needs to obtain an exclusive lock on the object. However, other processes may need to access object o, including processes that access object o more frequently than process p1. This can cause obvious processing inefficiency problems.
Thus, there is a need for data storage management techniques which address these inefficiency and overhead issues, as well as other related issues.